// main.js
const fileProcessor = require('./readyNtxt.js');

const directoryPath = './dataIn/待处理TXT'; // 你的目录路径

const interactWithChatGPT = require('../chatAPI.js');

var qusetion = require('../qusetionTxt.js');

// const myModule = require('./makeExcel');
const moment = require('moment'); // 如果你在Node.js环境中，需要这样引入moment.js
// console.log(currentDateTime);
// 日志模块初始化
const generateLog = require('./logger'); //日志模块
const path = require('path');
const logFilePath = path.join(__dirname, './log/appRun.log'); // 日志文件路径
const message = 'This is  system log,下面是本次系统日志：'; // 要记录的日志消息
generateLog(logFilePath, message);

const generateContent = require('../Gmini.js');


const {
    //     writeToExcel,
    // createExcelFile,
    // appendDataToExcel,
    appendToExcel,
    //     checkFileExists,
} = require('../outFile.js');

// 你的 API 密钥和模型 API 终点（如果需要的话，可以在这里覆盖默认值）
const apiKey = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijk1YTBlMjIzLWQ0ZGYtNGFkNC1iZjBlLTA3OWIyMTUxYmU5YiJ9.S95yOdHFmevutvd7_w81hBJjA2kKlnAQCdG0b7VwW7s';
const modelEndpoint = 'http://192.168.1.254:11434/v1/chat/completions'; //254 内必须映射11434到11433，ollama不直接对127.0.0.1之外的来访者提供服务
// const modelEndpoint = 'http://192.168.1.249:11434/v1/chat/completions';
// const modelEndpoint = 'http://127.0.0.1:11434/v1/chat/completions'; //本地
const modelName = 'openchat:7b-v3.5-1210';
// const modelName = 'openchat:7b-v3.5-q6_K';

var resData = [];

async function processFileContent(content, counts) {
    // 假设这个方法会处理文件内容并返回一些结果
    // 这里只是模拟了一个异步操作
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            var chatApiInputText = content.data + qusetion.qusetion; //inputText
            // console.log("请求question:", chatApiInputText)
            interactWithChatGPT(chatApiInputText, apiKey, modelEndpoint, modelName)
                .then(response => {
                    // const result = `Processed content:${content.email}-${content.data.substring(0, 10)}...`;
                    generateLog(logFilePath, '完成第' + counts + '次文本分析请求:' + content.email) //+ `${error}` + `--${nowTime}`);
                    resolve(response);
                }).catch(error => {
                    // console.error(logFilePath, 'openchatApi请求错误:' + content.email)
                    milliseconds = today.getMilliseconds();
                    generateLog(logFilePath, 'Error interacting with openChatAPI' + error) //+ `${error}` + `--${nowTime}`);
                        // callback();
                    console.log("chatAPI接口未响应或不存在！")
                    reject(error)
                });
            // 模拟处理过程

        }, 10); // 假设处理需要1秒钟
    });
}




async function processTxtFiles(counts) {
    var counts = 1;

    try {
        let filePath;
        do {
            // 获取一个新的、未读取的txt文件路径
            filePath = await fileProcessor.getNewTxtFilePath(directoryPath); //返回单个路径
            console.log("filePath", filePath)
            var arrryStr = [];
            if (filePath !== "") {
                // 读取文件内容
                const content = await fileProcessor.readFileContent(filePath, counts);
                // var chatApiInputText = content.data + qusetion.qusetion; //inputText
                // 处理文件内容，等待异步操作完成
                const processedResult = await processFileContent(content, counts);
                arrryStr.push(content.email);
                arrryStr.push(modelName);
                if (processedResult.choices != "" && typeof processedResult !== 'TypeError: fetch failed') {
                    if (processedResult.choices.length > 0 && processedResult.choices != "") {
                        // arrryStr.push(processedResult.model);
                        console.log("分析结果:", processedResult.choices[0].message);
                        arrryStr.push(processedResult.choices[0].message.content)
                        console.log("完成第" + counts + "个文本数据处理,模型是:" + modelName + "--" + modelEndpoint);
                        generateLog(logFilePath, "完成第" + counts + "个文本数据处理,模型是:" + modelName + "--" + modelEndpoint)

                    } else {
                        generateLog(logFilePath, '文本chatAPI分析异常:' + content.email) //+ `${error}` + `--${nowTime}`);
                        console.log("第" + counts + "个文本数据chatAPI处理异常!");
                        arrryStr.push("chatAPI返回无效格式");
                        // generateLog(logFilePath, "个文本数据chatAPI处理异常") //+ `${error}` + `--${nowTime}`);
                    }
                } else {
                    console.log("第" + counts + "个文本分析异常,chatAPI返回无效格式或接口不存在!");
                    console.log("apiResult:", processedResult)
                    arrryStr.push("chatAPI请求失败");
                    generateLog(logFilePath, "chatAPI返回无效格式或接口不存在")
                }

                let currentDateTime = moment().format('MM-DD HH:mm:ss'); // 你可以根据需要自定义日期和时间的格式
                arrryStr.push(currentDateTime)
            } else {
                console.log("全部处理完毕，共计:", counts)
            }

            counts++;
            resData.push(arrryStr)

        } while (filePath); // 当没有新的未读取文件时，filePath将为null/undefined，退出循环
        let currentDateTime = moment().format('MM-DD HH:mm'); // 你可以根据需要自定义日期和时间的格式

        // 追加写出表格文件
        appendToExcel('./outExe/纯文本数据分析结果-OpenAiV3.5.xlsx', currentDateTime, resData); //写出失败记录
        // createExcelFile(resData, './outExe/纯文本数据分析结果.xlsx', "sheet1")
        generateLog(logFilePath, '完成全部' + counts + '个文本数据处理！并保存了全部数据！') //+ `${error}` + `--${nowTime}`);

    } catch (error) {
        // 处理错误
        console.error('An error occurred:', error);
        generateLog(logFilePath, error) //+ `${error}` + `--${nowTime}`);
    }
}

// 开始处理txt文件
processTxtFiles();